home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / digestv3.zip / V3N7M.TXT < prev    next >
Text File  |  1993-12-07  |  13KB  |  310 lines

  1. Apparently-To: john.smith@gravis.com
  2.  
  3.  
  4. GUS Musician's Digest       Tue, 7 Dec 93  2:30          Volume 3: Issue   7  
  5.  
  6. Today's Topics:
  7.     Custom patches shipped with songs (was Patch Banking Treatise)
  8.                      GUS grannies and their banks
  9.                      GUS Musician's Digest V3 #4
  10.                      GUS Musician's Digest V3 #6
  11.                              MIDI-Through
  12.                    patch banking experiment report
  13.                    Patch banking standards proposal
  14.  
  15. Standard Info:
  16.     - Meta-info about the GUS can be found at the end of the Digest.
  17.     - Before you ask a question, please READ THE FAQ.
  18.  
  19. ----------------------------------------------------------------------
  20.  
  21. Date: Mon, 6 Dec 93 09:14:29 EST
  22. From: "Burns Fisher, VMS Engineering  06-Dec-1993 0914" <fisher@skylab.enet.dec.com>
  23. Subject: Custom patches shipped with songs (was Patch Banking Treatise)
  24.  
  25.  
  26.  
  27. ------------------------------
  28.  
  29. Date: 07 Dec 1993 03:40:14 +0700 (SST)
  30. From: TC <SH7126146@NTUVAX.NTU.AC.SG>
  31. Subject: GUS grannies and their banks
  32.  
  33. Eric,
  34.  
  35. > Here's the trouble with this approach. The application programs would
  36. > have to be modified to 'know' about and handle the .cfg file. Or the
  37. > driver would have to do the work, except the driver doesn't know
  38. > anything about filenames you might be playing. Even if it were 'told'
  39. > explicitly to load a .cfg file, that still means the calling
  40. > applications have to be modified.
  41.  
  42. What you could do in terms of automating the process for GUS grannies,
  43. is this: When you detect any bank switching code in the MIDI file, you
  44. inform the user that such-and-such bank will be used for a new
  45. instrument xxx (which could be embedded as a SysEx command). The user
  46. can elect to have the application overwrite his ULTRASND.INI to install
  47. the instruments in the specified banks, or install the instruments in a
  48. new bank (of his choosing) and change all references in the MIDI file
  49. accordingly, or ignore it.
  50.  
  51. Only GUS aware apps will do this of course. After all, even users of
  52. real synthesizers have to fiddle around too.
  53.  
  54.  tc
  55.  
  56. ------------------------------
  57.  
  58. Date: Sun, 5 Dec 1993 00:58:53 -0500
  59. From: jericho!gord (Gord Wait S-MOS Systems Vancouver Design Center)
  60. Subject: Re: GUS Musician's Digest V3 #4
  61.  
  62. RE: custom patches with midi songs..
  63. I think it would be a good thing to be able to ship songs out 
  64. and include custom patches with them. You can do this now for 
  65. playmidi can't you? IE for a midi file named woof.mid have a
  66. patch config file called woof.cfg that maps in the custom
  67.  pat files? I haven't tried this for a while. It also doesn't
  68. help under windows of course..
  69.  
  70. ------------------------------
  71.  
  72. Date: Mon, 6 Dec 1993 12:55:43 -0500 (EST)
  73. From: Phat H Tran <ptran@sciborg.uwaterloo.ca>
  74. Subject: Re: GUS Musician's Digest V3 #6
  75.  
  76. > Date: 05 Dec 93 17:21:32 EST
  77. > From: "Eric Bell, Howling Dog Systems" <71333.2166@CompuServe.COM>
  78. > Subject: Bank stuff
  79. > Phat writes:
  80. > > Why not have the Windows driver fill GUS RAM from the bottom (0k) up with
  81. > > melodic patches, and from the top (1024k -- or 1016k if 8k is reserved for
  82. > > WAV buffering) down with percussion patches?  This would save having to
  83. > > reload the drum patches each time a new melodic patch was needed.
  84. > This would make more sense, but there is no memory management in the chip at present. This task might be impossible.
  85. >
  86.  
  87. All the memory management is done by the driver, so it can fill memory
  88. however it wants.
  89.  
  90. > > 2.  MidiOutCachePatches should keep track of not only which patches have
  91. > > been cached, but from which bank.
  92. > > 3.  The driver should respond to Controller 0 to keep track of which bank
  93. > > is active for _each_ channel.
  94. > I think this would give us a really excellent and flexible system, but I worry
  95. > about having enough RAM on the board to make use of it to any extent.
  96.  
  97. I don't think RAM is any more a concern with patch banking than without.
  98. Even if we can pick and choose patches from any bank we want for each
  99. channel, are we likely to require any more patches than if we weren't
  100. allowed to switch banks?  I don't think so.  I think patch usage per MIDI
  101. piece would remain in the 20 to 30 instrument range, which 1 MB can 
  102. accomodate very well.
  103.  
  104. Phat.
  105.  
  106. ------------------------------
  107.  
  108. Date: 6 Dec 93 17:44:17 +0100
  109. From: "Alexander Majarek, Sascha, SAM"  <Alexander.Majarek@uibk.ac.at>
  110. Subject: MIDI-Through
  111.  
  112. Thanks again for your replies concerning my questions two weeks ago
  113. (Midi-In, Midi-Volume, Midi-Out, etc. with a digital piano). They
  114. helped me with a lot of problems.
  115.  
  116. One question is remaining: I am sure I have selected MIDI-Through in
  117. PatchMan and have selected the patch in the right window. Anyway:
  118.  ... I get NO sound when I play on my keyboard (and it sends on
  119. CHANNEL 1 !). When I close PatchMan and start Midi-Mon or Winjammer,
  120. I have no problems getting sound out of my gus when I'm touching my
  121. keyboard (the patch which was selected when I closed PatchMan).
  122.  
  123. Any idea what's going wrong there (in PatchMan)
  124.  
  125. Thanks in advance,
  126. SAM
  127.  
  128. *********************************************************************
  129. *Alexander.Majarek@uibk.ac.at * There are 3 ways (fast, sweet, sure)*
  130. *Perthalerg. 1c/11            * for a man to ruin himself:          *
  131. *A-6020 Innsbruck             * 1. Gamblin'   (fast),               *
  132. *AUSTRIA (EUROPE)             * 2. Women      (sweet) &             *
  133. *Tel.: 0043-512-84-26-15      * 3. Computers  (sure)                *
  134. *********************************************************************
  135.  
  136. ------------------------------
  137.  
  138. Date: Mon, 6 Dec 93 10:51:20 +0100
  139. From: f93-maj@nada.kth.se
  140. Subject: patch banking experiment report
  141.  
  142. This is what the Borland C++ 3.1 Multimedia Reference sais about Patch Caching:
  143.  ------------------------------------------------------------------------------
  144.  
  145. midiOutCachePatches
  146.  
  147. Syntax: UINT midiOutCachePatches(hMidiOut, wBank, lpPatchArray, wFlags)
  148.  
  149. This function requests that an internal MIDI synthesizer device preload a specified set of patches. Some synthesizers are not 
  150. capable of keeping all patches loaded simultaneously and must load data from disk when they receive MIDI program change 
  151. messages. Caching patches ensures specified patches are immediately available.
  152.  
  153. Parameters
  154.  
  155. HMIDIOUT hMidiOut
  156. Specifies a handle to the opened MIDI output device. This device must be an internal MIDI synthesizer.
  157.  
  158. UINT wBank
  159. Specifies which bank of patches should be used. To specify caching of the default patch bank, set this parameter to zero.
  160.  
  161. LPPATCHARRAY lpPatchArray
  162. Specifies a pointer to a PATCHARRAY array indicating the patches to be cached or uncached.
  163.  
  164. UINT wFlags
  165. Specifies options for the cache operation. Only one of the following flags can be specified:
  166.  
  167. MIDI_CACHE_ALL
  168. Cache all of the specified patches. If they can't all be cached, cache none, clear the PATCHARRAY array, and return 
  169. MMSYSERR_NOMEM.
  170.  
  171. MIDI_CACHE_BESTFIT
  172. Cache all of the specified patches. If all patches can't be cached, cache as many patches as possible, change the 
  173. PATCHARRAY array to reflect which patches were cached, and return MMSYSERR_NOMEM.
  174.  
  175. MIDI_CACHE_QUERY
  176. Change the PATCHARRAY array to indicate which patches are currently cached.
  177.  
  178. MIDI_UNCACHE
  179. Uncache the specified patches and clear the PATCHARRAY array.
  180.  
  181. Return Value
  182. Returns zero if the function was successful. Otherwise, [stuff deleted]
  183.  
  184. Comments
  185. The PATCHARRAY data type is defined as:
  186. typedef WORD PATCHARRAY[128];
  187. Each element of the array represents one of the 128 patches and has bits set for each of the 16 MIDI channels that use that 
  188. particular patch. The least-significant bit represents physical channel 0; the most-significant bit represents physical channel 15 
  189. (0x0F). For example, if patch 0 is used by physical channels 0 and 8, element 0 would be set to 0x0101.
  190. This function only applies to internal MIDI synthesizer devices. Not all internal synthesizers support patch caching. Use the 
  191. MIDICAPS_CACHE flag to test the dwSupport field of the MIDIOUTCAPS structure filled by midiOutGetDevCaps to see if the 
  192. device supports patch caching.
  193.  ------------------------------------------------------------------------------
  194.  
  195. After some experiments I have been able to draw the following conclusions:
  196.  
  197. 1) When midiOutCache with MIDI_CACHE_BESTFIT or MIDI_CACHE_ALL then all
  198.    previously loaded patches are cleared and thus incremental patch loading
  199.    (from multiple banks, nor from a single) are not possible.
  200.  
  201. 2) The Borland Reference says nowhere that previously loaded patches should be
  202.    removed, indeed the existence of MIDI_UNCACHE and MIDI_CACHE_QUERY would
  203.    imply the contrary.
  204.    I do not have the (official) Microsoft spec. so I don't know for sure but
  205.    let's hope it's just Gravis that hasn't implemented it correctly (mistakes
  206.    can always be corrected...)
  207.  
  208. 3) If a patch, that do not exist in a bank, is requested to be cached then it
  209.    is fetched from the default bank (bank 0).
  210.  
  211. 4) Say you have loaded up some patches from bank n, then MIDI_CACHE_QUERY
  212.    will return a zero PATCHARRAY when called for all banks except bank n.
  213.    Pathes of type 3) are also reported under bank n rather than bank 0.
  214.  
  215. 5) Does anyone have any real FACTS about above?
  216.    I think/hope that one SHOULD be able to do incremental patch caching.
  217.    Maybe someone could contact Microsoft (who created the API) to find
  218.    out how it should really work.
  219.  
  220. 6) (To Gravis:) Does the UltraSound driver recognize any midiOutMessage
  221.    messages? it would be fun if there where implemented a message that
  222.    took a memory handle to a PATCHSTRUCT or something and loaded it into
  223.    GUS memory. You could do app's that loaded any patches independently
  224.    of ULTRASND.INI, you could do realtime patch editors et c. et c.
  225.  
  226. 7) Let's hope for some order in this chaos!  3 weeks to happy GUSmas everyone!
  227.  
  228. /FMJ
  229.  
  230. ------------------------------
  231.  
  232. Date: Mon, 6 Dec 1993 09:00 -0500
  233. From: WADLEIGH@PROCESS.COM
  234. Subject: Patch banking standards proposal
  235.  
  236. OK, let's make things as easy as possible.  There's already a patch banking 
  237. standard in the Roland GS.  The first step should be to retain numeric 
  238. compatibility (like the GM standard).  Now the actual implementation does NOT
  239. have to retain the restrictions of the Roland.  In that case, switching banks
  240. may have the undesired effect of switching previously-loaded patches (since it's
  241. switching ROM banks).
  242. Custom patches should be reserved for some higher bank number.  If bank #0 is
  243. the General MIDI set and bank #1 is the GS extension set, then bank #2 is the
  244. user's "permanent" development set and so on through bank #14.  Bank #15 is a 
  245. "dynamic" set.  References to bank #15 would go to an external .CFG file that 
  246. must match the file name of the MIDI file.
  247.  
  248. Did I say "simple?"  OK, so it's not easy to program and involves som new 
  249. protocols for tracking program name and .CFG files.  Its main advantage is that 
  250. it retains maximin compatibility with everything from Roland through PLAYMIDI.
  251.  
  252. More comments?
  253.  
  254. Hal
  255.  
  256. ------------------------------
  257.  
  258. From: (null)
  259.  
  260. >We have to present a case to Gravis that will allow max flexibility with
  261. >minimum fuss for the end user. (The granny test is a good one. It should be
  262. >simple enough for your grandmother to get working).
  263.  
  264. Sorry, but *NOTHING* involving a PC passes this test.  MAC, maybe.  PC, no way.
  265.  
  266. >I propose an application program be created that would be able to scan the
  267. >ULTRASND.INI file and create the bank entries for the music file you are
  268. >installing, with the correct patch names, and subdirs etc.
  269.  
  270. I would think that there ought to be a much simpler scheme.  I'm thinking of MOD 
  271. files as a model, which include the sample info directly in themselves.  One 
  272. could do something similar if we reserved a particular bank number for this 
  273. purpose (so there would be no conflicts with things the user did), and then if 
  274. there were a command that one could give to the GUS driver which said something 
  275. like "load patches into bank xxx from the following file:" and give it the path 
  276. to the file.
  277.  
  278. But anyway, this stuff is all nice, but I'd like to see static bank switching 
  279. implemented reasonably first (though one should probably keep the "ship a patch 
  280. with a song" requirement in mind while designing V1 banks.
  281.  
  282. Burns
  283.  
  284. ------------------------------
  285.  
  286. End of GUS Musician's Digest V3 #7
  287. **********************************
  288.  
  289. To post to tomorrow's digest:                        <gus-music@dsd.es.com>
  290. To (un)subscribe or get help:                <gus-music-request@dsd.es.com>
  291. To contact a human (last resort):              <gus-music-owner@dsd.es.com>
  292.  
  293. FTP sites:           archive.epas.utoronto.ca              /pub/pc/ultrasound
  294.                      wuarchive.wustl.edu            /systems/msdos/ultrasound
  295.                      archive.orst.edu                    /pub/packages/gravis
  296.                      theoris.rz.uni-konstanz.de                /pub/sound/gus
  297. FTP mail server:     mail-server@nike.rz.uni-konstanz.de
  298.  
  299. Hints:
  300.       - Get the FAQ from the FTP sites or the request server.
  301.       - Mail to <gus-music-request@dsd.es.com> for info about other
  302.     GUS related mailing lists (general use, programmers, etc.).
  303.  
  304.  
  305.